#ifndef __RING_FIFO_H
#define __RING_FIFO_H

#ifdef __cplusplus
 extern "C" {
#endif

#include <stdint.h>
#include <string.h>
#include <stdbool.h>
#include <stdlib.h>

struct ringBuf_t;

/**
* @brief	初始化环形缓冲区
* @param	ringBuf:对应 FIFO 句柄
*			pBuf:数据存储缓冲区，如果为NULL，则默认使用堆内存分配
*			len:数据存储缓冲区长度
* @retval	执行状态
*/
uint32_t RingBufInit(struct ringBuf_t **_ringBuf, uint8_t *pBuf, const uint32_t len);
/**
* @brief	写入数据到环形缓冲区
* @param	ringBuf:对应 FIFO 句柄
*			pBuf:待写入数据缓冲区
*			len:待写入数据长度
* @retval	执行状态
*/
uint32_t RingWriteDataToBuffer(struct ringBuf_t *ringBuf, const uint8_t *pBuf, const uint32_t len);
/**
* @brief	从环形缓冲区读出数据
* @param	ringBuf:对应 FIFO 句柄
*			pBuf:存放读出数据缓冲区
*			len:存放读出数据缓冲区长度
*			rdlen:要读取多少数据
* @retval	实际读出数据量
*/
uint32_t RingReadDataFromBuffer(struct ringBuf_t *ringBuf, uint8_t *pBuf, const uint32_t len, const uint32_t rdlen);
/**
* @brief	销毁对应fifo
* @param	ringBuf:对应 FIFO 句柄
* @retval	void
*/
void RingBufDestroy(struct ringBuf_t *ringBuf);

#ifdef __cplusplus
}
#endif

#endif/*__RING_FIFO_H*/
